class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        vector<int> g(n+1,0);//g[i]代表偷取了i个房子之后，对于第i个房子我不选择之后的最高现金
        vector<int> f(n+1,0);//f[i]代表偷取了i个房子之后，对于第i个房子我选择之后的最高现金
        f[1] = nums[0];
        for(int i = 2;i<=n;i++)
        {
            f[i] = max(g[i-1]+nums[i-1],f[i-1]);//虽然我能够选择nums[i]，但是我也可以不选择
            g[i] = max(f[i-1],g[i-1]);//与上同理
        }
        return max(f[n],g[n]);
    }
};